package com.upao.util;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.EntityNotFoundException;
import com.google.appengine.api.datastore.FetchOptions;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Transaction;
import java.util.List;

/**
 *
 * @author Rey
 */
public class DBCurso {

    public static void save(Long id_user,String nombre_curso, String categoria, String tipo_curso, String tipo_acceso,
            String descripcion, String estado, String estado_puntuacion, Integer puntuacion, Double costo, String url,
            String direccion_paypal, String tipo_pago, String imagen, String obj1, String obj2,
            String obj3, String instructor) {
        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Transaction txn = datastore.beginTransaction();
        try {
            Entity curso = new Entity("Curso");
            curso.setProperty("idUser", id_user);
            curso.setProperty("nombre_curso", nombre_curso);
            curso.setProperty("categoria", categoria);
            curso.setProperty("tipo_curso", tipo_curso);
            curso.setProperty("tipo_acceso", tipo_acceso);
            curso.setProperty("descripcion", descripcion);
            curso.setProperty("estado", estado);
            curso.setProperty("estado_puntuacion", estado_puntuacion);
            curso.setProperty("puntuacion", puntuacion);
            curso.setProperty("costo", costo);
            curso.setProperty("url", url);
            curso.setProperty("direccion_paypal", direccion_paypal);
            curso.setProperty("tipo_pago", tipo_pago);
            curso.setProperty("imagen", imagen);
            curso.setProperty("obj1", obj1);
            curso.setProperty("obj2", obj2);
            curso.setProperty("obj3", obj3);
            curso.setProperty("instructor", instructor);
            datastore.put(curso);
            txn.commit();
        } finally {
            if (txn.isActive()) {
                txn.rollback();
            }
        }
    }
    public static void updateConfiguracion(Long id_curso, String nombre_curso, String estado,
            String url, String descripcion, String estado_puntuacion, String tipo_pago,
            Double costo, String direccion_paypal, String tipo_acceso) throws EntityNotFoundException {

        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Transaction txn = datastore.beginTransaction();
        try {
            Key key = KeyFactory.createKey("Curso", id_curso);
            Entity curso = datastore.get(key);
            curso.setProperty("nombre_curso", nombre_curso);
            curso.setProperty("estado", estado);
            curso.setProperty("url", url);
            curso.setProperty("descripcion", descripcion);
            curso.setProperty("estado_puntuacion", estado_puntuacion);
            curso.setProperty("tipo_pago", tipo_pago);
            curso.setProperty("costo", costo);
            curso.setProperty("direccion_paypal", direccion_paypal);
            curso.setProperty("tipo_acceso", tipo_acceso);
            datastore.put(curso);
            txn.commit();
        } finally {
            if (txn.isActive()) {
                txn.rollback();
            }
        }
    }
    public static void updateCategoria(Long id_curso, String categoria) throws EntityNotFoundException {
        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Transaction txn = datastore.beginTransaction();
        try {
            Key key = KeyFactory.createKey("Curso", id_curso);
            Entity curso = datastore.get(key);
            curso.setProperty("categoria", categoria);
            datastore.put(curso);
            txn.commit();
        } finally {
            if (txn.isActive()) {
                txn.rollback();
            }
        }
    }
    
     public static void updateObjetivos(Long id_curso, String objetivo1, String objetivo2, String objetivo3) throws EntityNotFoundException {
        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Transaction txn = datastore.beginTransaction();
        try {
            Key key = KeyFactory.createKey("Curso", id_curso);
            Entity curso = datastore.get(key);
            curso.setProperty("obj1", objetivo1);
            curso.setProperty("obj2", objetivo2);
            curso.setProperty("obj3", objetivo3);
            datastore.put(curso);
            txn.commit();
        } finally {
            if (txn.isActive()) {
                txn.rollback();
            }
        }
    }
    
    public static List<Entity> getAllCursos(Long id_User) {
        DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
        Transaction txn = ds.beginTransaction();
        Query q = new Query("Curso");
        q.addFilter("idUser", Query.FilterOperator.EQUAL, id_User); 
        PreparedQuery pq;
        try {
            pq = ds.prepare(q);
            txn.commit();
        } finally {
            if (txn.isActive()) {
                txn.rollback();
            }
        }
        return pq.asList(FetchOptions.Builder.withLimit(10));
    }
    public static void deleteCursoById(Long id) {
        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Transaction txn = datastore.beginTransaction();
        try {
            Key key = KeyFactory.createKey("Curso", id);
            datastore.delete(key);
            txn.commit();
        } finally {
            if (txn.isActive()) {
                txn.rollback();
            }
        }
    }
     public static Entity getEntityCursoByNombre(String nombre) {
        DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
        Query q = new Query("Curso");
        q.addFilter("nombre_curso", Query.FilterOperator.EQUAL, nombre); 
        PreparedQuery pq = ds.prepare(q);
        return pq.asQueryResultIterator().next();
    }
     
      public static void updateInstructor(Long id_curso, String instructor) throws EntityNotFoundException {
        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Transaction txn = datastore.beginTransaction();
        try {
            Key key = KeyFactory.createKey("Curso", id_curso);
            Entity curso = datastore.get(key);
            curso.setProperty("instructor", instructor);
            datastore.put(curso);
            txn.commit();
        } finally {
            if (txn.isActive()) {
                txn.rollback();
            }
        }
      }
}
